﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO_MechSys;
using System.Data.SqlClient;

namespace DAL_MechSys
{
    public class DALFuncionario : DALBase
    {
        private DTOFuncionario CriarFuncionario(SqlDataReader sqlDataReader)
        {
            try
            {
                DTOFuncionario dtoFuncionario = new DTOFuncionario();

                if (!string.IsNullOrEmpty(sqlDataReader["FuncionarioID"].ToString()))
                {
                    dtoFuncionario.FuncionarioID = (int)sqlDataReader["FuncionarioID"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Nome"].ToString()))
                {
                    dtoFuncionario.Nome = (string)sqlDataReader["Nome"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Sobrenome"].ToString()))
                {
                    dtoFuncionario.Sobrenome = (string)sqlDataReader["Sobrenome"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["DataNascimento"].ToString()))
                {
                    dtoFuncionario.DataNascimento = (DateTime)sqlDataReader["DataNascimento"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["CPF"].ToString()))
                {
                    dtoFuncionario.CPF = (string)sqlDataReader["CPF"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["RG"].ToString()))
                {
                    dtoFuncionario.RG = (string)sqlDataReader["RG"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["PIS"].ToString()))
                {
                    dtoFuncionario.PIS = (string)sqlDataReader["PIS"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Cargo"].ToString()))
                {
                    dtoFuncionario.Cargo = (string)sqlDataReader["Cargo"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Salario"].ToString()))
                {
                    dtoFuncionario.Salario = Convert.ToDouble(sqlDataReader["Salario"].ToString());
                }

                if (!string.IsNullOrEmpty(sqlDataReader["DataContratacao"].ToString()))
                {
                    dtoFuncionario.DataContratacao = (DateTime)sqlDataReader["DataContratacao"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["TipoAcesso"].ToString()))
                {
                    dtoFuncionario.TipoAcesso = Convert.ToByte(sqlDataReader["TipoAcesso"].ToString());
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Login"].ToString()))
                {
                    dtoFuncionario.Login = (string)sqlDataReader["Login"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Telefone"].ToString()))
                {
                    dtoFuncionario.Telefone = (string)sqlDataReader["Telefone"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Celular"].ToString()))
                {
                    dtoFuncionario.Celular = (string)sqlDataReader["Celular"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Email"].ToString()))
                {
                    dtoFuncionario.Email = (string)sqlDataReader["Email"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["EnderecoID"].ToString()))
                {
                    dtoFuncionario.EnderecoID = (int)sqlDataReader["EnderecoID"];
                }

                return dtoFuncionario;
            }
            catch (Exception)
            {
                throw;
            }
        }

        public void Inserir(DTOFuncionario dtoFuncionario)
        {
            try
            {
                string storedProssidere = "sp_InserirFuncionario";
                SqlParameter[] parameters =
                
                {  
                   new SqlParameter("@nome", dtoFuncionario.Nome),
                   new SqlParameter("@sobrenome", dtoFuncionario.Sobrenome),                   
                   new SqlParameter("@dataNascimento", dtoFuncionario.DataNascimento),
                   new SqlParameter("@rg", dtoFuncionario.RG),
                   new SqlParameter("@cpf", dtoFuncionario.CPF),
                   new SqlParameter("@pis", dtoFuncionario.PIS),
                   new SqlParameter("@cargo", dtoFuncionario.Cargo),
                   new SqlParameter("@salario", dtoFuncionario.Salario),
                   new SqlParameter("@dataContratacao", dtoFuncionario.DataContratacao),
                   new SqlParameter("@tipoAcesso", dtoFuncionario.TipoAcesso),
                   new SqlParameter("@login", dtoFuncionario.Login),
                   new SqlParameter("@senha", dtoFuncionario.Senha),
                   new SqlParameter("@telefone", dtoFuncionario.Telefone),                       
                   new SqlParameter("@celular", dtoFuncionario.Celular),
                   new SqlParameter("@email", dtoFuncionario.Email),
                   new SqlParameter("@enderecoID", dtoFuncionario.EnderecoID),
                   new SqlParameter("@dataRegistro", DateTime.Now)

                };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public List<DTOFuncionario> BuscarFuncionariosCadastrados()
        {
            List<DTOFuncionario> lstClietnes = new List<DTOFuncionario>();

            try
            {
                string storedProssidere = "sp_BuscarFuncionariosCadastrados";
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere))
                {
                    while (sqlDataReader.Read())
                    {

                        DTOFuncionario dtoFuncionario = CriarFuncionario(sqlDataReader);

                        lstClietnes.Add(dtoFuncionario);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstClietnes;
        }

        public void Atualizar(DTOFuncionario dtoFuncionario)
        {
            try
            {
                string storedProssidere = "sp_AtualizarFuncionario";
                SqlParameter[] parameters =

                        {                    
                           new SqlParameter("@funcionarioID", dtoFuncionario.FuncionarioID),
                           new SqlParameter("@nome", dtoFuncionario.Nome),
                   new SqlParameter("@sobrenome", dtoFuncionario.Sobrenome),                   
                   new SqlParameter("@dataNascimento", dtoFuncionario.DataNascimento),
                   new SqlParameter("@rg", dtoFuncionario.RG),
                   new SqlParameter("@cpf", dtoFuncionario.CPF),
                   new SqlParameter("@pis", dtoFuncionario.PIS),
                   new SqlParameter("@cargo", dtoFuncionario.Cargo),
                   new SqlParameter("@salario", dtoFuncionario.Salario),
                   new SqlParameter("@dataContratacao", dtoFuncionario.DataContratacao),
                   new SqlParameter("@tipoAcesso", dtoFuncionario.TipoAcesso),
                   new SqlParameter("@login", dtoFuncionario.Login),
                   new SqlParameter("@senha", dtoFuncionario.Senha),
                   new SqlParameter("@telefone", dtoFuncionario.Telefone),                       
                   new SqlParameter("@celular", dtoFuncionario.Celular),
                   new SqlParameter("@email", dtoFuncionario.Email),
                   new SqlParameter("@enderecoID", dtoFuncionario.EnderecoID),
                   new SqlParameter("@dataRegistro", DateTime.Now)        
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public void Excluir(int funcionarioID)
        {
            try
            {
                string storedProssidere = "sp_ExcluirFuncionario";
                SqlParameter[] parameters =

                        {                    
                           new SqlParameter("@funcionarioID", funcionarioID)                                    
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public bool VerificaSeFuncionarioIDExiste(int funcionarioID)
        {
            bool Existe = false;

            try
            {
                string storedProssidere = "sp_VerificaSeFuncionarioIDExiste";

                SqlParameter[] parameters =
            {
                new SqlParameter("@funcionarioID", funcionarioID),                            
            };

                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    if (sqlDataReader.Read())
                    {
                        int NumReg = (int)sqlDataReader["NumeroRegistros"];
                        if (NumReg > 0)
                        {
                            Existe = true;
                        }

                    }
                }
                return Existe;

            }
            catch (Exception)
            {
                throw;
            }

        }

        public List<DTOFuncionario> PesquisarFuncionarios(string texto, int codigo)
        {
            List<DTOFuncionario> lstFuncionario = new List<DTOFuncionario>();

            try
            {
                string storedProssidere = "sp_BuscarFuncionariosPesquisaID";

                SqlParameter[] parameters =                
                { 
                   new SqlParameter("@string", texto),
                   new SqlParameter("@int", codigo)
                  
                };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    while (sqlDataReader.Read())
                    {
                        DTOFuncionario dtoFuncionario = CriarFuncionario(sqlDataReader);

                        lstFuncionario.Add(dtoFuncionario);
                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstFuncionario;
        }
        public List<DTOFuncionario> PesquisarFuncionarios(string texto)
        {
            List<DTOFuncionario> lstFuncionario = new List<DTOFuncionario>();

            try
            {
                string storedProssidere = "sp_BuscarFuncionariosPesquisa";

                SqlParameter[] parameters =                
                { 
                   new SqlParameter("@string", texto)
                  
                };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    while (sqlDataReader.Read())
                    {
                        DTOFuncionario dtoFuncionario = CriarFuncionario(sqlDataReader);

                        lstFuncionario.Add(dtoFuncionario);
                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstFuncionario;
        }
    }
}
